package com.tiancheng.trade.order.service;

import com.tiancheng.trade.commom.core.data.PageInfo;
import com.tiancheng.trade.order.model.BankCard;
import com.tiancheng.trade.order.vo.admin.QueryBankCardVO;
import com.tiancheng.trade.order.vo.admin.res.QueryBankCardResVO;
import com.tiancheng.trade.order.vo.app.BankCardBindingVo;
import com.tiancheng.trade.order.vo.app.SetCardVO;
import com.tiancheng.trade.order.vo.app.UnboundCardVO;
import com.tiancheng.trade.order.vo.app.res.BankCardBindingResVo;
import com.tiancheng.trade.order.vo.app.res.BankCardVO;
import com.tiancheng.trade.order.vo.app.res.BankInfoVo;

import java.util.List;
import java.util.Map;

/**
 * 银行卡绑定Service接口
 *
 * @author likailun
 * @date 2021-08-23
 */
public interface BankCardService {
    /**
     * 查询用户已开通的卡列表
     *
     * @param uid
     * @return
     */
    List<BankCardVO> queryByUid(String uid);

    /**
     * 查询绑卡申请的状态
     *
     * @param uid    用户id
     * @param flowId 绑卡申请id
     * @return
     */
    BankCardVO queryBindingStatus(String uid, String flowId);

    /**
     * 查询绑卡信息
     *
     * @param uid    用户id
     * @param flowId 绑卡申请id
     * @return
     */
    BankCard queryByUidAndFlowId(String uid, String flowId);

    /**
     * 申请绑定银行卡,云闪付一键绑卡
     *
     * @param bankCardBindingVo
     * @return
     */
    BankCardBindingResVo binding(BankCardBindingVo bankCardBindingVo);

    /**
     * 银行卡解绑
     * @param setCardVO 解绑
     */
    void unbound(SetCardVO setCardVO);

    /**
     * 开卡信息回调处理
     *
     * @param msgMap
     * @return
     */
     void openCardCallbackHandler(Map<String, String> msgMap);

    /**
     * 查询银联支持的银行列白哦
     * @return 银行信息列表
     */
     List<BankInfoVo> queryBankList();

    /**
     * 设置默认支付的卡
     * @param defaultPayCardVO 卡参数
     */
    void setDefaultPayCard(SetCardVO defaultPayCardVO);

    /**
     * 解绑所有银行卡
     * @param unboundCardVO
     */
    void unboundAllBankCard(UnboundCardVO unboundCardVO);

    /**
     *解绑所有银行卡和一码通
     * @param unboundCardVO
     */
    void unboundAllBankCardAndOneCode(UnboundCardVO unboundCardVO);
    /**
     * 获取我的默认支付的卡
     * @param uid 用户id
     * @return
     */
    BankCard getDefaultCard(String uid);

    /**
     * 查询银联支持的银行列白哦
     * @return 银行信息列表
     */
    PageInfo<QueryBankCardResVO> queryBankPage(QueryBankCardVO queryBankCardVO);
}
